REM >Director:Menus.System.Variables
ON ERROR ERROR EXT ERR,REPORT$+" at line "+STR$ ERL:END

DIM buf 1024
SYS "OS_GetEnv" TO in$
match$=FNarg(in$,"-match","")
search=(ASC match$=34)
not$=FNarg(in$,"-not","")
IF search THEN
 SYS "Director_Menu",MID$(match$,2)+" Varlist -temp"
 search$=FNlc(MID$(match$,2))
 match$="*"
ELSE
 SYS "Director_Menu",match$+" Varlist -temp"
ENDIF
os_rvv=FNswi_number("XOS_ReadVarVal")
option=FNswi_number("Director_Option")
ptr=0
REPEAT
 SYS os_rvv,match$,buf,1024,ptr,3 TO ,,read,ptr,type ;f
 IF ptr<>0 AND (f AND 1)=0 THEN
  var$=FN0(ptr)
  IF FNlc(RIGHT$(var$,5))="$path" THEN
    path$=LEFT$(var$,LEN(var$)-5)+":"
  ELSE
    IF FNlc(RIGHT$(var$,4))="$dir" THEN
      path$="|||<"+var$+">"
    ELSE
      path$=""
    ENDIF
  ENDIF
  IF NOT search THEN
   IF not$="" OR INSTR(var$,not$)=0 SYS option,var$+" -sub ""Dynamic:/Director:Menus.System.VarVal |<MenuText|> "+path$+" "+var$+""""
  ELSE
   buf?read=13
   IF var$<>"MenuText" AND var$<>"Alias$DirectorRun" THEN
    IF INSTR(FNlc($buf),search$)>0 SYS option,var$+" -sub ""Dynamic:/Director:Menus.System.VarVal |<MenuText|> "+path$+" "+var$+""""
   ENDIF
  ENDIF
 ENDIF
UNTIL ptr=0
*EndMenu
*Set Director$Menu Varlist
END

DEF FNarg(str$,arg$,def$)
LOCAL i,j
i=INSTR(str$,arg$)
IF i=0 THEN =def$
i+=LEN arg$+1
j=INSTR(str$+" <"," ",i)
=MID$(str$,i,j-i)

DEF FNswi_number(swi$)
SYS "OS_SWINumberFromString",,swi$ TO swi%
=swi%

DEF FN0(a)
a$=""
WHILE ?a<>0
 a$+=CHR$?a
 a+=1
ENDWHILE
=a$

DEF FNlc(a$)
FOR i=1 TO LEN a$
 c=ASC MID$(a$,i,1)
 IF c>=65 AND c<=90 MID$(a$,i,1)=CHR$(c+32)
NEXT
=a$
